#Boa:Dialog:Dialog1
# -*- coding: utf-8 -*-

import wx
import consultasBD
import utiles
from mktsend import Sender

username = 'sussan'
password = 'suSSan42'
reporteTo = ['ceportela@gmail.com','sussanboutique@gmail.com']

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1BUTTON4, wxID_DIALOG1DATEPICKERCTRL1, wxID_DIALOG1LISTBOX1, 
 wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, 
] = [wx.NewId() for _init_ctrls in range(9)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(127, 93), size=wx.Size(433, 412),
              style=wx.DEFAULT_DIALOG_STYLE, title='RE-Enviar agradecimientos')
        self.SetClientSize(wx.Size(425, 385))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='Fecha', name='staticText1', parent=self, pos=wx.Point(16,
              24), size=wx.Size(29, 13), style=0)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_DIALOG1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self, pos=wx.Point(16, 40),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Buscar',
              name='button1', parent=self, pos=wx.Point(104, 40),
              size=wx.Size(56, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_DIALOG1BUTTON1)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Enviar',
              name='button2', parent=self, pos=wx.Point(160, 40),
              size=wx.Size(56, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnEnviar, id=wxID_DIALOG1BUTTON2)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Limpiar',
              name='button3', parent=self, pos=wx.Point(216, 40),
              size=wx.Size(56, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_DIALOG1BUTTON3)

        self.listBox1 = wx.ListBox(choices=[], id=wxID_DIALOG1LISTBOX1,
              name='listBox1', parent=self, pos=wx.Point(16, 72),
              size=wx.Size(400, 304), style=0)

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='Salir',
              name='button4', parent=self, pos=wx.Point(360, 40),
              size=wx.Size(56, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON4)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Esta ventana es solo para retransmitir agradecimientos que no hayan sido enviados',
              name='staticText2', parent=self, pos=wx.Point(16, 8),
              size=wx.Size(401, 13), style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def OnBuscar(self, event):
        self.OnLimpiar(None)
        fecha = self.datePickerCtrl1.GetLabel()
        fecha = fecha.replace("/","-")
        fecha1 = utiles.invertirFecha(fecha)+" 00:00:00"
        fecha2 = utiles.invertirFecha(fecha)+" 23:59:59"
        r1 = "SELECT c.nombre,c.idcliente,c.email,c.listanegra \n"
        r2 = "FROM cliente c,ventas v \n"
        r3 = "WHERE c.idcliente=v.idcliente AND c.email<>'' AND c.listanegra<>'1' AND \n"
        r4 = "      v.fecha BETWEEN '"+fecha1+"' AND '"+fecha2+"' \n"
        r5 = "ORDER BY c.nombre "
        sql = r1+r2+r3+r4+r5
        resultados = consultasBD.ordenCruda(sql)
        for item in resultados:
            if item[2]==1: continue
            nombre = item[0]
            idcliente = item[1]
            email = item[2]
            texto = nombre+" / "+idcliente+" / "+email
            self.listBox1.Append(str(texto))

    def OnLimpiar(self, event):
        self.listBox1.Clear()
        self.datePickerCtrl1.SetFocus()

    def OnSalir(self, event):
        self.Close()

    def OnEnviar(self, event):
        print "Enviando agradecimiento de fecha",self.datePickerCtrl1.GetLabel()

        datosSucursal = utiles.datosSucursal()
        numeroSucursal = datosSucursal[0]
        nombreSucursal = datosSucursal[1]
        fecha = utiles.obtenerFecha("d-m-Y")
        f = open("modelos\\agradecimiento.html","r")
        modelo = f.read()
        f.close()
        s = Sender(username, password)
        correctos = 0
        erroneos = 0
        listaEnviadosOK = "<ul>\n"
        listaEnviadosMAL = "<ul>\n"
        listaNegra = []
        erroresacumulados = ""

        for item in self.listBox1.GetItems():
            nombre,idcliente,email = item.split(" / ")
            nombre = str(nombre)
            if "***" in nombre: continue
            idcliente = str(idcliente)
            email = str(email)

            to = []
            to.append(unicode(str(nombre+" <"+email+">"),'utf-8'))

            subject = unicode('GRACIAS POR TU COMPRA!!!','utf-8')
            text = unicode('Desde Sussan Boutique queremos agradecerte el habernos visitado')
            html = modelo
            html = html.replace("MINOMBRE",nombre)
            html = html.replace("MIFECHA",str(self.datePickerCtrl1.GetLabel()))
            html = unicode(html)
            resultado = s.send(to,subject,text,html) # Esta linea debe devolver un "OK"

            if resultado=='"OK"':
                correctos+= 1
                listaEnviadosOK+= "<li>"+nombre+" "+email+"</li>\n"
            else:
                erroneos+= 1
                listaEnviadosMAL+= "<li>"+nombre+" "+email+"</li>\n"
                erroresacumulados+= "<br>"+nombre+" "+email+" :<br>"+resultado+"\n"
                print nombre,email,":"
                print resultado
                if "<Code>MessageRejected</Code>" in resultado and \
                   "<Message>Address blacklisted.</Message>" in resultado:
                    listaNegra.append((idcliente,nombre,email))

        listaEnviadosOK+='</ul><br>\n'
        listaEnviadosMAL+='</ul><br>\n'
            
        print "Agradecimientos re-transmitidos:"
        print "-Correctos: ",correctos
        print "-Erroneos: ",erroneos

        html = "AGRADECIMIENTOS RE-TRANSMITIDOS "+nombreSucursal+": <br>\n"
        html+= "-Correctos: "+str(correctos)+"<br>\n"
        html+= "-Erroneos: "+str(erroneos)+"<br><br>\n"
        html+= "DETALLE:"+"<br><br>\n"
        html+= "Enviados:<br>"+listaEnviadosOK
        if erroresacumulados!="":
            html+= "No Enviados:<br>"+listaEnviadosMAL+"<br>\n"
            html+= erroresacumulados
        if listaNegra!=[]:
            html+= "Lista negra:<br>\n"
            for item in listaNegra:
                html+= "-"+item[2]+"<br>\n"

        to = []
        for item in reporteTo:
            to.append(unicode(item,'utf-8'))
        texto = "Agradecimientos desde "+nombreSucursal+" "+fecha
        subject = unicode(texto,'utf-8')
        text = unicode('Agradecimientos enviados')
        html = unicode(html)
        resultado = s.send(to,subject,text,html) # Esta linea debe devolver un "OK"

        print "Reporte de agradecimientos",resultado
        print "FIN RE-TRANSMISION AGRADECIMIENTOS"

        if listaNegra != []:
            #procesar cliente en lista negra
            try:
                consultasBD.begin()
                for item in listaNegra:
                    idcliente = item[0]
                    SQL = "UPDATE cliente SET listanegra='1' WHERE idcliente='%s'" % (idcliente)
                    consultasBD.ordenCrudaSinCommit(SQL)
                consultasBD.commit()
            except:
                consultasBD.rollback()                                         
